1
Mâu thuẫn hiệu suất: Vì sao mã đúng lại chậm?
AI023Lesson 6
00:00

Hiệu suất Mâu thuẫn hiệu suất cho rằng một hàm hạt nhân hoàn hảo về mặt toán học, ví dụ như $out = x + y$, có thể thực sự hoạt động kém hơn vòng lặp trên CPU nếu nó không thể giảm thiểu được chi phí cố định của phần cứng GPU. Điều này thường thể hiện qua Phí khởi chạy.

1. Sai lầm về "Tính chính xác"

Tính chính xác chức năng không phải là chỉ số thay thế cho hiệu suất. Dù mã Triton của bạn có thể phân phối công việc chính xác đến hàng nghìn luồng, nhưng nếu tổng khối lượng công việc (N) quá nhỏ, GPU sẽ không được tận dụng tối đa. Phần cứng dành nhiều thời gian hơn trong các chuyển đổi trạng thái so với thực hiện phép toán thực sự.

2. Bẫy đo lường bằng Python

Đo lường hiệu suất mã GPU từ Python bằng cách sử dụng time.time() là rất nguy hiểm. Các lời gọi GPU là bất đồng bộ; Python chỉ đơn giản là đặt vào hàng đợi lệnh và tiếp tục tiến hành. Không có torch.cuda.synchronize(), bạn đang đo thời gian xếp hàng. Khi đồng bộ hóa, bạn đo được thời gian trễ từ máy chủ đến thiết bị, thường dài gấp 10 lần so với thời gian thực thi hàm hạt nhân.

Chi phí xử lý của Python/Driver (Phí khởi chạy)Hàm hạt nhânThời gian (ms)

3. Thời gian trễ so với băng thông

Để vượt qua mâu thuẫn này, bạn cần cung cấp đủ khối lượng công việc để "che giấu" thời gian trễ khởi chạy. Đây là sự chuyển dịch từ chế độ giới hạn bởi thời gian trễ chế độ (giới hạn bởi đường truyền CPU-GPU) sang chế độ giới hạn bởi băng thông chế độ (giới hạn bởi bộ nhớ hoặc tính toán GPU).

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>